home *** CD-ROM | disk | FTP | other *** search
- Procedure DiskErrors(Nr :Integer);
- Const ung=' ungülig';
- notfnd =' nicht gefunden';
- begin
- Case Abs(Nr) of
- 2 :DiskError:='Datei'+notfnd;
- 3 :DiskError:='Pfad '+notfnd;
- 4 :DiskError:='zuviele offene Dateien';
- 5 :DiskError:='Dateizugriff verweigert/ Directory voll';
- 6 :DiskError:='Datei-Handle'+ung;
- 12:DiskError:='Dateimodus'+ung;
- 15:DiskError:='Laufwerksangabe'+ung;
- 16:DiskError:='aktuelles Verzeichnis nicht entfernbar';
- 17:DiskError:='Rename kann nicht kopieren';
- 100:DiskError:='Lesefehler';
- 101:DiskError:='Schreibfehler/Diskette voll';
- 102:DiskError:='Datei nicht zugeordnet';
- 103:DiskError:='Datei nicht offen';
- 104:DiskError:='Datei nur zum Lesen offen';
- 105:DiskError:='Datei nur zum Schreiben offen';
- 106:DiskError:='Ungültiges Zahlenformat';
- 150:DiskError:='Schreibschutz';
- 151:DiskError:='unbek. Dev.';
- 152:DiskError:='Laufwerk nicht bereit';
- 153:DiskError:='Unbek. DOS-Fkt.';
- 154:DiskError:='CRC-Fehler/ schlechte Diskette';
- 155:DiskError:='unglt. DPB';
- 156:DiskError:='Kopf-Positionierfehler';
- 157:DiskError:='unbek. Sektorformat';
- 158:DiskError:='Sektor'+notfnd;
- -1..
- -10:DiskError:='Stream-I/O-Fehler';
- else DiskError:='unbek. Disk-Fehler';
- end;
- If Nr>=0 then Write(DiskError);
- end;
-
- Procedure PromptError;
- Var TC :Char;
- begin
- ErrorInit;
- DiskErrors(IOStatus);
- Select(' Abbruch (J/N) ?',['J','N',Esc],TC);
- If TC='J' then StIOCheck(0);
- end;
-
-
- (*$I-*)
-
- Function GenugMem:Boolean;
- Begin
- GenugMem:=Maxavail>GenugRAM;
- End;
-
-
- Procedure StIoCheck(K:Word);
- Begin
- OK:=IoStatus=0;
- If Not(Ok) Then
- begin
- If GrafmodeGlb then TextMode;
- ClrScr;
- GotoXY(1,1);
- Writeln('Fataler Ein/Ausgabe-Fehler : ');
- If K>0 Then Writeln('Objekt-Nummer : ',K);
- Writeln;DiskErrors(IoStatus);
- Writeln;
- Writeln('Weiter : Irgendeine Taste');
- Waitonkey;
- Halt;
- End;
- End;
-
- Function OpenError:Boolean;
- Var Result :Boolean;
- begin
- Result:=false;
- If Not(Ok) then
- begin
- Result:=true;
- Case IoStatus of
- 2,3: Result:=false; {Datei/Path nicht gefunden}
- 5,150,152 :PromptError;
- {5 =Dir voll/Schreibschutz }
- {150 =Schreibschutz}
- {152 =Drive not Ready }
- else StIOCheck(0);
- end;
- end;
- OpenError:=Result;
- end;
-
- procedure OpenFile(var DatF : DataFile; FName : Str64);
- begin
- Inc(No_blink,1); { Disable Blinken }
- Assign(DatF,FName);
- IOstatus := IOresult;
- StIOcheck(0);
- Repeat
- Reset(DatF,Sizeof(Bildelement));
- IOstatus := IOresult;
- OK:=(IoStatus=0);
- until (Iostatus=5) or Not(Openerror);
- Dec(No_blink,1); { Enable Blinken }
- end;
-
-
- procedure MakeFile(var DatF : DataFile; FName : Str64);
- begin
- Inc(No_blink,1); { Disable Blinken }
- Assign(DatF,FName);
- IOstatus := IOresult;
- StIOcheck(0);
- Repeat
- Rewrite(DatF,Sizeof(Bildelement));
- IOstatus := IOresult;
- OK := IOstatus=0;
- Until Not(OpenError);
- Dec(No_blink,1); { Enable Blinken }
- end;
-
-
- procedure CloseFile(var DatF : DataFile);
-
- begin
- Inc(No_blink,1); { Disable Blinken }
- Close(DatF);
- IOstatus := IOresult;
- Iostatus:=0;
- Dec(No_blink,1); { Enable Blinken }
- end;
-
-
- Function UsedRecs(var DatF : DataFile):Longint;
-
- begin
- Inc(No_blink,1); { Disable Blinken }
- UsedRecs:=FileSize(DatF);
- IOstatus := IOresult;
- StIOcheck(65535);
- Dec(No_blink,1); { Enable Blinken }
- end;
-
-
- Procedure OpenEXT;
- begin
- Inc(No_blink,1); { Disable Blinken }
- TMP:=nil;
- If MaxAvail>5*Sizeof(TTmpStream) then
- TMP:=New(PtmpStream,
- Init(Longint(Stackzeiger)*Sizeof(Bildelement),'.$LD'));
- IoStatus:=$FFFF;
- If tmp<>nil then
- IoStatus:=Tmp^.Status;
- Dec(No_blink,1); { Enable Blinken }
- end;
-
-
- Procedure CloseEXT;
- begin
- If TMP<>nil Then
- Begin
- Inc(No_blink,1); { Disable Blinken }
- Dispose(TMP,done);
- Dec(No_blink,1); { Enable Blinken }
- End;
-
- end;
-
- Procedure CheckRamdiskPath;
- Var Drive:Char;
- Begin
- Inc(No_blink,1); { Disable Blinken }
- With SetupInfo Do
- If LastTMPDrive<>'' then
- begin
- Drive:=Upcase(LastTMPDrive[1]);
- If (Drive>='C') and (Drive<'Z') then LastTMPDrive:=Drive;
- end;
- Dec(No_blink,1); { Enable Blinken }
- End;
-
-
- Procedure InitStorage;
- Begin
- FillChar(RecordStack,Sizeof(RecordStack),0);
- StackZeiger:=0;
- NmaxMem:=0;
- FirstFree:=65535;
- TMP:=nil;
- CheckRamDiskpath;
- StackMin:=1;
- Ok:=True;
- End;
-
-
- Procedure EndStorage;
- Var I :Word;
-
- Begin
- For I:=0 to Hi(NmaxMem) do
- If RecordStack[I]<>nil then
- begin
- Dispose(RecordStack[I]);
- RecordStack[I]:=nil;
- end;
- CloseEXT;
- end;
-
- Procedure ResetStack(K :Word);
-
- Begin
- If K<NmaxMem Then
- If TMP<>nil Then
- begin
- Dispose(TMP,Done);
- TMP:=nil;
- end;
- StackZeiger:=K;
- End;
-
-
- Procedure GetRec(Var Obj :Bildelement;K :Word);
-
- Begin
- Ok:=true;
- If K<=NmaxMem Then
- begin
- Dec(K,1);
- Obj:=RecordStack[Hi(K)]^ [Lo(K)]
- End
- else
- Begin
- Inc(No_blink,1); { Disable Blinken }
- TMP^.Seek(Longint(K-NmaxMem-1)*Sizeof(Bildelement));
- Ok:=TMP^.Status=0;
- TMP^.Read(Obj,Sizeof(Bildelement));
- Ok:=(TMP^.Status=0) and Ok;
- Dec(No_blink,1); { Enable Blinken }
- End;
- End;
-
-
- Procedure PutRec(Obj :Bildelement;K :Word);
- Var TmpFile :Datafile;
- Buf :Bildelement;
- Begin
- Ok:=true;
- DWG_modified:=true;
- If K<=NmaxMem Then
- begin
- Dec(K,1);
- RecordStack[Hi(K)]^ [Lo(K)]:=Obj;
- end
- else
- Begin
- Inc(No_blink,1); { Disable Blinken }
- TMP^.Seek(Longint(K-NmaxMem-1)*Sizeof(Bildelement));
- Ok:=TMP^.Status=0;
- If Ok then
- begin
- TMP^.Write(Obj,Sizeof(Bildelement));
- Ok:=(TMP^.Status=0);
- end;
- IoStatus:=TMP^.Status;
- StIoCheck(K);
- Dec(No_blink,1); { Enable Blinken }
- End;
- End;
-
-
- Procedure AddRec(Obj : Bildelement; Var K :Word);
-
- Var Ob1 :Bildelement;
- BlockNr : Word;
- Begin
- Ok:=true;
- If (FirstFree<= StackZeiger) and (FirstFree>=StackMin) Then
- Begin
- GetRec(Ob1,FirstFree);
- Obj.Status:=0;
- PutRec(Obj,FirstFree);
- K:=FirstFree;
- FirstFree:=Ob1.Status;
- End
- else
- begin (* Neuer Record *)
- Inc(StackZeiger,1);
- K:=StackZeiger;
- If (StackZeiger > NmaxMem) and (TMP=nil) Then
- If GenugMem Then
- begin
- BlockNr:=Hi(Pred(StackZeiger));
- New(RecordStack[BlockNr]);
- Inc(NmaxMem,256);
- End
- Else OpenEXT;
- Obj.Status:=0;
- PutRec(Obj,StackZeiger);
- end;
- End;
- (*$I+*)
-
-
- Procedure DeleteRec(Var Obj: Bildelement;K: Word);
-
- Var Stat: Word;
- Begin
- GetRec(Obj,K);
- Stat:=Obj.Status;
- Obj.Status:=FirstFree;
- PutRec(Obj,K);
- FirstFree:=K;
- Obj.Status:=Stat;
- End;
-